#include<iostream>
using namespace std;

/*
给定一个正整数n，生成一个包含1到n^2所有元素，
且元素按顺时针顺序螺旋排列的正方形矩阵。

示例:
输入: 3 输出:[
                [1,2,3],
                [8,9,4], 
                [7,6,5]
            ]
*/
void matrixGen(int n){
    int end=n*n;
    int s=1;
    int**array=new int*[n];
    for(int i=0;i<n;i++){
        array[i]=new int[n];
    }

    for(int i=0;i<n;i++){
        for(int j=0;j<n;j++){
            array[i][j]=0;
        }
    }

    //顺时针一圈一圈赋值
    int batch=n/2+1;
    for(int i=0;i<batch;i++){
        //填充横向上行
        for(int j=i;j<n-i;j++){
            //第i圈可以填充的位置为array[i][i:n-i-1]
            array[i][j]=s;
            s++;
        }
        //填充纵向右列
        for(int j=i+1;j<n-i;j++){
            //第i圈可以填充的位置为array[i+1:n-i-1][n-i-1]
            array[j][n-i-1]=s;
            s++;
        }
        //填充横向下行
        for(int j=n-i-2;j>=i;j--){
            //第i圈可以填充的位置为array[n-i-1][i:n-i-2]
            array[n-i-1][j]=s;
            s++;
        }
        //填充纵向左列
        for(int j=n-i-2;j>i;j--){
            //第i圈可以填充的位置为array[i+1:n-i-2][i]
            array[j][i]=s;
            s++;
        }
    }

    for(int i=0;i<n;i++){
        for(int j=0;j<n;j++){
            cout<<array[i][j]<<" ";
        }
        cout<<endl;
    }

    for(int i=0;i<n;i++){
        delete[]array[i];
    }
    delete[]array;
}

int main(){
    matrixGen(6);
    return 0;
}